#!/bin/bash

# 爬虫停止脚本
# 用法: ./stop_spider.sh <spider_name> [--force]
# 例如: ./stop_spider.sh nfpa --force

# 检查参数
if [ $# -eq 0 ]; then
    echo "用法: $0 <spider_name> [--force]"
    echo "例如: $0 nfpa --force"
    exit 1
fi

SPIDER_NAME=$1
FORCE=$2

# 检查爬虫名称是否为空
if [ -z "$SPIDER_NAME" ]; then
    echo "错误: 爬虫名称不能为空"
    exit 1
fi

PID_FILE="${SPIDER_NAME}.pid"
LOG_FILE="${SPIDER_NAME}.log"

# 检查 PID 文件是否存在
if [ ! -f "$PID_FILE" ]; then
    echo "错误: 找不到 PID 文件 $PID_FILE"
    echo "爬虫 $SPIDER_NAME 可能没有在运行"
    exit 1
fi

# 读取 PID
PID=$(cat "$PID_FILE")

# 检查进程是否存在
if ! ps -p $PID > /dev/null 2>&1; then
    echo "进程 $PID 不存在，清理 PID 文件"
    rm -f "$PID_FILE"
    exit 1
fi

echo "停止爬虫: $SPIDER_NAME (PID: $PID)"

# 尝试优雅停止
echo "正在尝试优雅停止..."
kill $PID

# 等待进程结束
for i in {1..10}; do
    if ! ps -p $PID > /dev/null 2>&1; then
        echo "✅ 爬虫已优雅停止"
        rm -f "$PID_FILE"
        exit 0
    fi
    echo "等待进程结束... ($i/10)"
    sleep 2
done

# 如果优雅停止失败，询问是否强制停止
if [ "$FORCE" = "--force" ]; then
    echo "优雅停止失败，正在强制停止..."
    kill -9 $PID
    sleep 1
    if ! ps -p $PID > /dev/null 2>&1; then
        echo "✅ 爬虫已强制停止"
        rm -f "$PID_FILE"
        exit 0
    else
        echo "❌ 强制停止失败"
        exit 1
    fi
else
    echo "优雅停止失败，进程仍在运行"
    echo "如需强制停止，请运行: $0 $SPIDER_NAME --force"
    exit 1
fi 